/**
 * 页面通知监听器
 * 主动监听页面切换和用户操作，确保通知检查不被遗漏
 */

import globalNotificationManager from './globalNotificationManager.js'

class PageNotificationListener {
  constructor() {
    this.isActive = false
    this.checkTimer = null
    this.lastPagePath = ''
    this.pageEnterTimes = new Map()
    this.checkInterval = 3000 // 3秒后检查一次
  }

  /**
   * 启动页面监听
   */
  start() {
    if (this.isActive) {
      return
    }

    this.isActive = true
    console.log('🎯 启动页面通知监听器')

    // 监听页面路由变化（如果支持的话）
    this.setupRouteListener()

    // 启动定时检查（兜底机制）
    this.startPeriodicCheck()
  }

  /**
   * 停止页面监听
   */
  stop() {
    if (!this.isActive) {
      return
    }

    this.isActive = false
    console.log('🎯 停止页面通知监听器')

    if (this.checkTimer) {
      clearInterval(this.checkTimer)
      this.checkTimer = null
    }
  }

  /**
   * 页面进入时调用
   * @param {string} pagePath 页面路径
   */
  async onPageEnter(pagePath) {
    if (!this.isActive) {
      return
    }

    console.log(`🎯 页面进入: ${pagePath}`)
    
    const now = Date.now()
    this.lastPagePath = pagePath
    this.pageEnterTimes.set(pagePath, now)

    // 延迟检查，确保页面完全加载
    setTimeout(async () => {
      try {
        await globalNotificationManager.onPageShow(pagePath)
      } catch (error) {
        console.log('页面通知检查失败:', error)
      }
    }, 1000) // 1秒延迟
  }

  /**
   * 页面离开时调用
   * @param {string} pagePath 页面路径
   */
  onPageLeave(pagePath) {
    if (!this.isActive) {
      return
    }

    console.log(`🎯 页面离开: ${pagePath}`)
    // 清理该页面的记录
    this.pageEnterTimes.delete(pagePath)
  }

  /**
   * 设置路由监听（尝试多种方式）
   */
  setupRouteListener() {
    try {
      // 方式1: 监听uni的路由事件（如果存在）
      if (typeof uni !== 'undefined' && uni.onAppRoute) {
        uni.onAppRoute((route) => {
          console.log('🎯 路由变化:', route)
          this.onPageEnter(route.path)
        })
      }

      // 方式2: 监听页面栈变化
      if (typeof uni !== 'undefined') {
        // 定期检查页面栈
        setInterval(() => {
          this.checkCurrentPage()
        }, 2000)
      }

    } catch (error) {
      console.log('设置路由监听失败:', error)
    }
  }

  /**
   * 检查当前页面
   */
  checkCurrentPage() {
    try {
      if (typeof uni === 'undefined') {
        return
      }

      const pages = getCurrentPages()
      if (pages && pages.length > 0) {
        const currentPage = pages[pages.length - 1]
        const currentPath = currentPage.route || currentPage.__route__ || ''
        
        if (currentPath && currentPath !== this.lastPagePath) {
          console.log(`🎯 检测到页面变化: ${this.lastPagePath} → ${currentPath}`)
          this.onPageEnter(currentPath)
        }
      }
    } catch (error) {
      console.log('检查当前页面失败:', error)
    }
  }

  /**
   * 启动定时检查（兜底机制）
   */
  startPeriodicCheck() {
    // 每30秒检查一次，确保不遗漏
    this.checkTimer = setInterval(() => {
      if (this.isActive) {
        console.log('🎯 定时兜底检查')
        globalNotificationManager.triggerCheck('页面监听器兜底')
      }
    }, 30000)
  }

  /**
   * 手动触发检查（供外部调用）
   */
  async manualCheck(source = '手动触发') {
    console.log(`🎯 手动触发检查: ${source}`)
    try {
      await globalNotificationManager.triggerCheck(source)
    } catch (error) {
      console.log('手动检查失败:', error)
    }
  }

  /**
   * 获取状态信息
   */
  getStatus() {
    return {
      isActive: this.isActive,
      lastPagePath: this.lastPagePath,
      pageEnterTimes: Object.fromEntries(this.pageEnterTimes),
      checkInterval: this.checkInterval
    }
  }
}

// 创建全局实例
const pageNotificationListener = new PageNotificationListener()

// 在开发环境暴露到全局
if (typeof window !== 'undefined') {
  window.pageNotificationListener = pageNotificationListener
}

export default pageNotificationListener